/*
List里面常用的属性和方法：
  常用属性：
    length          长度
    reversed        翻转
    isEmpty         是否为空
    isNotEmpty      是否不为空
  常用方法：  
    add         增加 相当于Array.push
    addAll      拼接数组
    indexOf     查找  传入具体值
    remove      删除  传入具体值
    removeAt    删除  传入索引值
    fillRange   修改   
    insert(index,value);            指定位置插入    
    insertAll(index,list)           指定位置插入List
    toList()    其他类型转换成List  
    join()      List转换成字符串
    split()     字符串转化成List
    forEach   
    map
    where
    any
    every


映射(Maps)是无序的键值对：
  常用属性：
    keys            获取所有的key值
    values          获取所有的value值
    isEmpty         是否为空
    isNotEmpty      是否不为空
  常用方法:
    remove(key)     删除指定key的数据
    addAll({...})   合并映射  给映射内增加属性
    containsValue   是否包含某个键  返回true/false
    forEach   
    map
    where
    any
    every
*/
main() {
  // 1. List里面的属性

  // List myList = [
  //   {"id": 0, "name": "香蕉"},
  //   {"id": 1, "name": "苹果"},
  //   {"id": 2, "name": "桃子"}
  // ];
  // print(myList.length);
  // print(myList.isEmpty);
  // print(myList.isNotEmpty);
  // print(myList
  //     .reversed); //对列表倒序排序 此时并不是数组 而是一个迭代器({id: 2, name: 桃子}, {id: 1, name: 苹果}, {id: 0, name: 香蕉})
  // var newMyList = myList.reversed
  //     .toList(); // 需要转成数组[{id: 2, name: 桃子}, {id: 1, name: 苹果}, {id: 0, name: 香蕉}]
  // print(newMyList);

  // 2. List里面的方法：

  // List myList = ['香蕉', '苹果', '西瓜'];
  // myList.add('桃子'); //增加数据  增加一个
  // myList.addAll(['桃子', '葡萄']); //拼接数组 相当于concat
  // print(myList);
  // print(myList.indexOf('苹x果')); //indexOf查找数据 查找不到返回-1  查找到返回索引值

  // myList.remove('西瓜'); // 删除该值
  // myList.removeAt(1); // 删除该索引对应的值
  // print(myList);

  // 3. set 去重
  // List myList = ['香蕉', '苹果', '西瓜', '香蕉', '苹果', '香蕉', '苹果'];
  // var s = new Set(); // 是一个可迭代对象
  // s.addAll(myList);
  // print(s);
  // print(s.toList()); // 转成数组

  // 4. Maps的属性和方法
  // Map person = {"name": "张三", "age": 20, "sex": "男"};

  // print(person.keys); // 可以继续调用 .toList()方法 转成数组
  // print(person.values.toList());
  // print(person.isEmpty);
  // print(person.isNotEmpty);
  // print(person.containsValue(20)); // 查看是否包含某个值 其余用法基本与js一致

  // 5. 遍历的方法
  List myList = ['香蕉', '苹果', '西瓜'];
  // 5.1 forEach 和js相比 少了箭头函数
  myList.forEach((value) {
    print("$value");
  });

  // 5.2 map  有返回值
  var newList = myList.map((value) {
    return value + 'haha';
  });
  print(newList.toList());

  // 5.3 where  同js的filter 过滤
  List myList1 = [1, 3, 4, 5, 7, 8, 9];
  var newList1 = myList1.where((value) {
    return value > 5;
  });
  print(newList1.toList());

  // 5.4 any  同js的some
  // List myList=[1,3,4,5,7,8,9];
  // var f=myList.any((value){   //只要集合里面有满足条件的就返回true
  //     return value>5;
  // });
  // print(f);

  // 5.5 every
  // List myList=[1,3,4,5,7,8,9];
  // var f=myList.every((value){   //每一个都满足条件返回true  否则返回false
  //     return value>5;
  // });
  // print(f);

  // 6. 遍历对象
  Map person = {"name": "张三", "age": 20};

  person.forEach((key, value) {
    print("$key---$value");
  });
}
